package observadores;
import java.util.ArrayList;
import java.util.List;

import modelo.delictivas.ITrampa;
import modelo.delictivas.Ladron;
import modelo.lugaresYPistas.IRespuesta;


public abstract class Observable {
	private List<Observador> observadores;
	
	public Observable(){
		this.observadores = new ArrayList<Observador>();
	}
	
	public void notificarObservadores() {
        for (Observador o: observadores) {
            o.actualizar();
        }
    }
	
	public void notificarViaje() {
        for (Observador o: observadores) {
            o.jugadorViaja();
        }
    }
	
	public void notificarTiempoTerminado() {
        for (Observador o: observadores) {
            o.tiempoTerminado();
        }
    }
	
	public void notificarTrampa(ITrampa trampa) {
        for (Observador o: observadores) {
            o.trampaActivada(trampa);
        }
    }
	
	public void notificarLadronEncontrado() {
        for (Observador o: observadores) {
            o.ladronEncontrado();
        }
    }
	
	public void notificarLadronArrestado() {
        for (Observador o: observadores) {
            o.ladronArrestado();
        }
    }
	
	public void notificarLadronEscapa() {
        for (Observador o: observadores) {
            o.ladronEscapa();
        }
    }
	
	public void notificarRespuestaRecibida(IRespuesta respuesta) {
		for (Observador o: observadores) {
            o.respuestaRecibida(respuesta);
        }
	}

	public void notificarOrdenDeArrestoDenegada() {
		for (Observador o: observadores) {
            o.ordenArrestoDenegada();
        }
	}

	public void notificarOrdenDeArrestoObtenida(Ladron ladron) {
		for (Observador o: observadores) {
            o.ordenArrestoObtenida(ladron);
        }
	}
	
	public void notificarPoliciaDuerme() {
		for (Observador o: observadores) {
            o.policiaDuerme();
        }
	}
	
	public void notificarAscenso() {
		for (Observador o: observadores) {
            o.ascensoDePolicia();
        }
	}
	
	public void notificarFaltanArrestosParaAscenso(int arrestosFaltantes) {
		for (Observador o: observadores) {
            o.faltanAscensos(arrestosFaltantes);
        }
	}
	
	public void agregarObservador(Observador o) {
        observadores.add(o);
    }
 
	public void eliminarObservador(Observador o) {
        observadores.remove(o);
    }
	
	
}
